Passed
Pull Request — develop (#758)
by Kevin Van
08:05 queued 04:16
created

IndexPage   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 274
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 19
eloc 210
dl 0
loc 274
rs 10
c 0
b 0
f 0

14 Functions

Rating   Name   Duplication   Size   Complexity  
A renderMatchSlider 0 4 1
A renderATeamCalendarArticle 0 4 1
A renderMakroArticle 0 24 1
A renderTablebooker 0 31 1
A renderExtraContentFooter 0 8 1
B renderLayoutMain 0 27 5
A renderPosts 0 7 1
A renderTrooperArticle 0 28 1
A renderYouthCalendarArticle 0 4 1
A renderBTeamCalendarArticle 0 4 1
A renderWebsiteFeedbackArticle 0 12 1
A render 0 31 1
A calcFeaturedPosts 0 9 2
A renderLayoutSidebar 0 22 1
1
import { graphql } from "gatsby"
2
import React, { Component, Fragment } from "react"
3
4
import { CardImage } from "../components/Card"
5
import Card from "../components/Card"
6
import KcvvTvOverview from "../components/KcvvTvOverview"
7
import MatchesOverview from "../components/MatchesOverview"
8
import MatchesSlider from "../components/MatchesSlider"
9
import MatchesTabs from "../components/MatchesTabs"
10
import UpcomingEvent from "../components/UpcomingEvent.tsx"
11
import { NewsItemFeatured, NewsItemCardRatio } from "../components/news-item"
12
import SEO from "../components/seo"
13
import MyMakro from "../images/tag-mymakro.png"
14
import Trooper from "../images/tag-trooper.png"
15
import Layout from "../layouts/index"
16
17
class IndexPage extends Component {
18
  renderMatchSlider = () => (
19
    <section className={`grid-container full`}>
20
      <MatchesSlider />
21
    </section>
22
  )
23
24
  renderMakroArticle = () => (
25
    <Card className={`medium-6 large-12 cell card`} title="MyMakro">
26
      <p>
27
        Link nu jouw Makro voordeelkaart aan onze vereniging. Bij elke aankoop bij Makro en partners steun je KCVV
28
        Elewijt!
29
      </p>
30
      <p>
31
        <img src={MyMakro} alt="QR Code MyMakro" style={{ width: `100%` }} />
32
      </p>
33
      <p>
34
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
35
        <a
36
          href="https://my.makro.be/nl/link-vereniging/02277464"
37
          target="_blank"
38
          rel="noopener noreferrer"
39
          title="MyMakro link voor KCVV Elewijt"
40
          className={`rich-link`}
41
        >
42
          https://my.makro.be/nl/link-vereniging/02277464
43
        </a>
44
        .
45
      </p>
46
      <p>Onze vereniging dankt jullie van harte!</p>
47
    </Card>
48
  )
49
  renderTrooperArticle = () => (
50
    <Card className={`medium-6 large-12 cell card`} title="Trooper">
51
      <p>
52
        Trooper werkt samen met een groot aantal webshops die zich in de kijker willen zetten. In ruil voor een extra
53
        klik via Trooper krijgen wij een percentje op jouw volgende bestelling.
54
      </p>
55
      <p>
56
        <img src={Trooper} alt="QR Code Trooper" style={{ width: `100%` }} />
57
      </p>
58
      <p>
59
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
60
        <a
61
          href="https://trooper.be/kcvvelewijt"
62
          target="_blank"
63
          rel="noopener noreferrer"
64
          title="Trooper link voor KCVV Elewijt"
65
          className={`rich-link`}
66
        >
67
          https://trooper.be/kcvvelewijt
68
        </a>
69
        .
70
      </p>
71
      <p>
72
        <a href="/news/2020-04-12-steun-kcvv-elewijt-trooper-mymakro" className={`rich-link`}>
73
          Lees er hier meer over!
74
        </a>
75
      </p>
76
    </Card>
77
  )
78
  renderYouthCalendarArticle = () => (
79
    <Card className={`medium-6 large-12 cell`} title="Jeugdploegen" hasTable={true}>
80
      <MatchesOverview exclude={[`1`, `2`]} action="next" />
81
    </Card>
82
  )
83
84
  renderBTeamCalendarArticle = () => (
85
    <Card className={`medium-6 large-12 cell`} title="The B-Team" hasTable={true}>
86
      <MatchesTabs teamId="2" />
87
    </Card>
88
  )
89
  renderATeamCalendarArticle = () => (
90
    <Card className={`medium-6 large-12 cell`} title="The A-Team" hasTable={true}>
91
      <MatchesTabs teamId="1" />
92
    </Card>
93
  )
94
95
  renderTablebooker = () => (
96
    <Fragment>
97
      <Card className={`medium-6 large-12 cell card`} title="Mosselfestijn" titleIcon="fa-cutlery">
98
        <p>
99
          Op vrijdag 10, zaterdag 11 en zondag 12 september 2021 vindt ons jaarlijkse Mosselfestijn weer plaats. Om de
100
          spreiding te kunnen garanderen en wachttijden aan de ingang zoveel mogelijk te beperken werken we dit jaar
101
          opnieuw met een reservatiesysteem. Hieronder kan je zelf jouw gewenste tijdstip en gezelschap selecteren en
102
          een tafel boeken (voor 08/09/2021).
103
        </p>
104
        <p>
105
          Telefonisch reserveren kan dagelijks tussen 18u en 21u op het nummer
106
          {` `}
107
          <a href="tel:+32475981611">0475/98.16.11</a>
108
        </p>
109
        <p>
110
          Ter plaatse een tafel vragen kan, naargelang de beschikbaarheid op dat moment, maar hou er rekening mee dat we
111
          onze capaciteit hebben moeten verlagen om aan de regelgeving te kunnen voldoen. Wie zeker wil zijn van zijn
112
          plek kan beter reserveren.
113
        </p>
114
      </Card>
115
      <article className={`medium-6 large-12 cell tablebooker`}>
116
        <tbkr-bm-widget
117
          restaurant-id="34742560"
118
          source="website"
119
          use-modal="0"
120
          lang="nl"
121
          theme="light"
122
        ></tbkr-bm-widget>
123
        <script src="https://reservations.tablebooker.com/tbkr-widget-import.min.js"></script>
124
      </article>
125
    </Fragment>
126
  )
127
128
  renderWebsiteFeedbackArticle = () => (
129
    <Card className={`medium-6 large-12 cell card`} title="Website feedback" titleIcon="fa-commenting-o">
130
      <p>
131
        Na lang zwoegen is onze nieuwe website eíndelijk online geraakt! We zijn heel benieuwd naar jullie mening of
132
        feedback. Als jullie vinden dat er iets ontbreekt, of als je bepaalde fouten tegenkomt, zouden we het ten
133
        zeerste appreciëren als je ons even iets laat weten op{` `}
134
        <a href="mailto:[email protected]" className={`rich-link`}>
135
          [email protected]
136
        </a>
137
        !
138
      </p>
139
    </Card>
140
  )
141
  renderExtraContentFooter = (preseason) => (
142
    <section className="grid-container site-content">
143
      <div className="grid-x grid-margin-x">
144
        <section className={`cell large-12 featured-article`}>
145
          <CardImage title="Update voorbereiding 2020-2021" picture={preseason} link="/games" metadata={false} />
146
        </section>
147
      </div>
148
    </section>
149
  )
150
151
  // convertGraphqlToPlayerObject = (player) => {
152
  //   return {
153
  //     nameFirst: player.field_firstname,
154
  //     nameLast: player.field_lastname,
155
  //     shirtNr: player.field_shirtnumber,
156
  //     position: player.field_position,
157
  //     imageSrc:
158
  //       player.relationships.field_image.localFile.childImageSharp.fixed.src,
159
  //     link: player.path.alias,
160
  //   }
161
  // }
162
163
  // renderPlayerOfTheWeek = (featuredPlayer) =>
164
  //   featuredPlayer.edges.map(
165
  //     ({ node: potw }) =>
166
  //       potw.relationships.field_player && (
167
  //         <article
168
  //           className={"medium-6 large-12 cell card"}
169
  //           key={potw.relationships.field_player.field_firstname}
170
  //         >
171
  //           <header className={"card__header"}>
172
  //             <h4>Speler van de week</h4>
173
  //           </header>
174
  //           <PlayerFeatured
175
  //             player={this.convertGraphqlToPlayerObject(
176
  //               potw.relationships.field_player
177
  //             )}
178
  //           />
179
  //         </article>
180
  //       )
181
  //   )
182
183
  renderPosts = (posts) => {
184
    return posts.map(({ node }, i) => {
185
      return (
186
        <Fragment key={i}>
187
          {node.field_featured && <NewsItemFeatured node={node} />}
188
          {!node.field_featured && <NewsItemCardRatio node={node} teaser={true} />}
189
        </Fragment>
190
      )
191
    })
192
  }
193
194
  renderLayoutSidebar = () => {
195
    // const { featuredPlayer } = this.props.data
196
    return (
197
      <Fragment>
198
        {/* TABLEBOOKER WIDGET */}
199
        {/* this.renderTablebooker() */}
200
        {/* A TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING*/}
201
        {this.renderATeamCalendarArticle()}
202
        {/* B TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING */}
203
        {this.renderBTeamCalendarArticle()}
204
        {/* YOUTH TEAMS OVERVIEW - SUMMARY OF UPCOMING MATCHES */}
205
        {this.renderYouthCalendarArticle()}
206
        {/* PLAYER OF THE WEEK ARTICLE IF ANY */}
207
        {/* {featuredPlayer && this.renderPlayerOfTheWeek(featuredPlayer)} */}
208
        {/* INFO ARTICLE WITH SOCIAL MEDIA LINKS */}
209
        {/* INFO ARTICLE WITH REQUEST FOR WEBSITE FEEDBACK */}
210
        {this.renderWebsiteFeedbackArticle()}
211
        {/* INFO ARTICLE WITH "TROOPER" CONTENT */}
212
        {this.renderTrooperArticle()}
213
        {/* INFO ARTICLE WITH "MYMAKRO" CONTENT */}
214
        {this.renderMakroArticle()}
215
      </Fragment>
216
    )
217
  }
218
219
  calcFeaturedPosts = (posts) => {
220
    let featured = 0
221
    posts.forEach((post) => {
222
      if (post.field_featured) {
223
        featured++
224
      }
225
    })
226
227
    return featured
228
  }
229
230
  renderLayoutMain = () => {
231
    const { featuredPosts } = this.props.data
232
    const quotient1 = this.calcFeaturedPosts(featuredPosts.edges.slice(0, 1)) % 2
233
    const quotient2 =
234
      (quotient1 !== 0
235
        ? this.calcFeaturedPosts(featuredPosts.edges.slice(0))
236
        : this.calcFeaturedPosts(featuredPosts.edges.slice(1))) % 2
237
238
    return (
239
      <Fragment>
240
        <UpcomingEvent />
241
        {featuredPosts &&
242
          (quotient1 !== 0
243
            ? this.renderPosts(featuredPosts.edges.slice(0, 0))
244
            : this.renderPosts(featuredPosts.edges.slice(0, 1)))}
245
246
        <KcvvTvOverview />
247
248
        {featuredPosts &&
249
          featuredPosts.edges.length > 6 &&
250
          this.renderPosts(
251
            featuredPosts.edges.slice(
252
              quotient1 !== 0 ? 0 : 1,
253
              quotient2 !== 0 ? featuredPosts.edges.length : featuredPosts.edges.length - 1
254
            )
255
          )}
256
      </Fragment>
257
    )
258
  }
259
260
  render() {
261
    return (
262
      <Layout>
263
        <SEO
264
          lang="nl-BE"
265
          title="Er is maar één plezante compagnie"
266
          description="Startpagina van stamnummer 00055: KCVV Elewijt."
267
        />
268
        {/* {this.renderExtraContentFooter(this.props.data.preseason)} */}
269
270
        <section className="grid-container site-content">
271
          {/* LIMITED-WIDTH CONTAINER WITH EXTRA (STICKY) CONTENT, IF ANY */}
272
273
          <div className="grid-x grid-margin-x">
274
            <section className="cell large-8 news_overview__wrapper">
275
              {/* MAIN CONTENT AREA */}
276
              {this.renderLayoutMain()}
277
            </section>
278
            <aside className="cell large-4">
279
              <section className="grid-x featured__matches grid-margin-x">
280
                {/* SIDEBAR CONTENT */}
281
                {this.renderLayoutSidebar()}
282
              </section>
283
            </aside>
284
          </div>
285
        </section>
286
287
        {/* FULL-WIDTH SLICK SLIDER WITH UPCOMING MATCHES */}
288
        {this.renderMatchSlider()}
289
      </Layout>
290
    )
291
  }
292
}
293
294
export const pageQuery = graphql`
295
  query {
296
    featuredPosts: allNodeArticle(
297
      filter: { status: { eq: true }, promote: { eq: true } }
298
      sort: { fields: created, order: DESC }
299
      limit: 12
300
    ) {
301
      edges {
302
        node {
303
          id
304
          path {
305
            alias
306
          }
307
          created(formatString: "D/M/YYYY")
308
          changed(formatString: "D/M/YYYY")
309
          timestamp: changed(formatString: "x")
310
          title
311
          promote
312
          status
313
          field_featured
314
          body {
315
            value
316
            format
317
            processed
318
            summary
319
          }
320
          relationships {
321
            field_media_article_image {
322
              ...ArticleImage
323
            }
324
            field_tags {
325
              name
326
              path {
327
                alias
328
              }
329
            }
330
          }
331
          internal {
332
            type
333
          }
334
        }
335
      }
336
    }
337
    preseason: file(name: { eq: "preseason2020-2021" }) {
338
      ...KCVVFluid960
339
    }
340
    featuredPlayer: allNodePotw(sort: { fields: created, order: DESC }, filter: { status: { eq: true } }, limit: 1) {
341
      edges {
342
        node {
343
          relationships {
344
            field_player {
345
              field_firstname
346
              field_lastname
347
              field_shirtnumber
348
              field_position
349
              relationships {
350
                field_image {
351
                  localFile {
352
                    ...KCVVFixedPlayerTeaser
353
                  }
354
                }
355
              }
356
              path {
357
                alias
358
              }
359
            }
360
          }
361
        }
362
      }
363
    }
364
  }
365
`
366
367
export default IndexPage
368